using System;
using Sinacor.Infra.Common;
using System.Collections.Generic;
using Sinacor.Servico.Bovespa.Ordens.BusinessEntity;
using Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator
{
    /// <summary>
    /// Classe tradutora entre objetos Ordem e OrdemDistribuicao
    /// </summary>
    public class OrdemToOrdemDistribuicao : BaseTranslator<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemDistribuicao, Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Ordem, List<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemDistribuicao>, List<Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Ordem>>
    {
        public override Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemDistribuicao Translate(Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Ordem from)
        {
            Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemDistribuicao to = new Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Response.OrdemDistribuicao();
            // Unable to assign a nullable type to a non nullable type. 
            // to.DataOrdem = from.DataOrdem;
            
            to.ApelidoCliente = from.ApelidoCliente;
            to.Bolsa = from.Bolsa;
            to.CodigoBroker = from.CodigoBroker;
            to.DataOrdem = from.DataOrdem;
            to.DataPregao = from.DataPregao;
            to.HoraOrdem = from.HoraOrdem;
            to.IndicadorCancelamentoDistribuicao = from.IndicadorCancelamentoDistribuicao;
            to.IndicadorDistribuicao = from.IndicadorDistribuicao;
            to.LoginOperador = from.LoginOperador;

            if (from.NaturezaOperacao.HasValue)
            {
                switch (from.NaturezaOperacao.Value)
                {
                    case BusinessEntity.Enum.TipoNaturezaOperacao.Compra:
                        to.NaturezaOperacao = DataContract.Enum.TipoNaturezaOperacao.Compra;
                        break;
                    case BusinessEntity.Enum.TipoNaturezaOperacao.Venda:
                        to.NaturezaOperacao = DataContract.Enum.TipoNaturezaOperacao.Venda;
                        break;
                }
            }

            to.NomeCliente = from.NomeCliente;
            to.NumeroConjunto = from.NumeroConjunto;
            to.NumeroNegocio = from.NumeroNegocio;
            to.NumeroOrdem = from.NumeroOrdem;
            to.NumeroOrdemOriginal = from.NumeroOrdemOriginal;
            to.NumeroOrdemSubSequencia = from.NumeroOrdemSubSequencia;
            to.PercentualDistribuido = from.PercentualDistribuido;
            to.Quantidade = from.Quantidade;
            to.QuantidadeCasada = from.QuantidadeCasada;
            to.QuantidadeDistribuida = from.QuantidadeDistribuida;
            to.TipoMercado = (DataContract.Enum.TipoMercado)new System.ComponentModel.EnumConverter(from.TipoMercado.GetType()).ConvertFrom(from.TipoMercado.ToString()); 
            to.Titulo = from.Titulo;

            return to;
        }
    }
}

